package cn.sightsnow.zh.service;

import cn.sightsnow.zh.entity.EasyDlResult;
import cn.sightsnow.zh.entity.EasyResult;
import cn.sightsnow.zh.repository.EasyDlResultRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * EasyDlResult服务类，处理识别结果相关业务逻辑
 */
@Service
@Slf4j
public class EasyDlResultService {

    @Autowired
    private EasyDlResultRepository easyDlResultRepository;

    /**
     * 定时任务：每3秒检查并修复easyDlResult表中缺失sort_result_name的记录
     * 查找数据库中所有sort_result_name为null或空字符串的记录，
     * 并根据results字段中置信度最高的结果设置sort_result_name
     */
    @Scheduled(fixedRate = 3000)
    public void checkAndFixSortResultName() {
        log.info("开始执行EasyDlResult修复任务...");
        
        try {
            // 获取所有记录
            List<EasyDlResult> allResults = easyDlResultRepository.findAll();
            int fixedCount = 0;
            
            for (EasyDlResult result : allResults) {
                // 检查sort_result_name是否为空
                if (result.getSort_result_name() == null || result.getSort_result_name().trim().isEmpty()) {
                    log.info("发现缺失sort_result_name的记录，ID: {}, Log ID: {}", 
                            result.getEasyDlResultId(), result.getLog_id());
                    
                    // 检查results是否有效
                    List<EasyResult> results = result.getResults();
                    if (results != null && !results.isEmpty()) {
                        // 按置信度排序
                        Collections.sort(results, new Comparator<EasyResult>() {
                            @Override
                            public int compare(EasyResult o1, EasyResult o2) {
                                return Integer.valueOf(o2.getScore().intValue())
                                        .compareTo(Integer.valueOf(o1.getScore().intValue()));
                            }
                        });
                        
                        // 获取置信度最高的结果名称
                        String highestConfidenceName = results.get(0).getName();
                        log.info("设置sort_result_name为置信度最高的结果: {}", highestConfidenceName);
                        
                        // 更新记录
                        result.setSort_result_name(highestConfidenceName);
                        easyDlResultRepository.save(result);
                        fixedCount++;
                    } else {
                        log.warn("记录ID: {}的results为空或null，无法修复", result.getEasyDlResultId());
                    }
                }
            }
            
            if (fixedCount > 0) {
                log.info("修复任务完成，共修复 {} 条记录", fixedCount);
            } else {
                log.info("修复任务完成，没有需要修复的记录");
            }
        } catch (Exception e) {
            log.error("执行修复任务时发生错误: {}", e.getMessage(), e);
        }
    }
} 